home *** CD-ROM | disk | FTP | other *** search
-
- *ARRAY MACROS
- *AFFECTS: XR0, AC, T, P
- *
- * ARRAY <NAME>,(<1ST DIM ARG>,<2ND DIM>,<2ND DIM ARG>, ... )
- *
- *ARGUMENTS MAY BE CONSTANTS OR VARIABLES
- *DIMENSIONS MUST BE CONSTANTS (< 13 BITS)
- *<NAME> MAY BE A CONSTANT ARRAY NAME: FOO
- * OR A VARIABLE CONTAINING A POINTER TO THE
- * ARRAY: (FOO)
- *
- *ARRAY LOCATION IS LEFT IN THE AC
-
- COPY MACROS.LCAC
-
- ARRAY $MACRO A,B,T
- $IF T.L=0 USE XR0 AS TEMP
- $ASG 'XR0' TO T.S
- $ENDIF
- $ARY2 :T:,:B: CALL ARY2 WITH TEMP
- $IF A.L#=0
- $IF A.A&$POPL
- ADD :A: ADD ARRAY OFFSET VAR
- $ELSE
- SACL :T:,0 SAVE INDEX COMP
- LCAC :A: LOAD ARRAY ADDR :A:
- ADD :T:,0 ADD INDEX
- $ENDIF
- $ENDIF
- $END
-
- $ARY2 $MACRO T,A,B,C,A2,B2,C2
- $IF B.L=0
- $IF A.SA&$UNDF
- LACK :A: LOAD CONST 1ST DIM :A:
- $ELSE
- LAC :A:,0 LOAD 1ST DIM :A:
- $ENDIF
- $ELSE
- $IF C.SA&$UNDF
- LACK :C: LOAD CONST 2ND DIM :C:
- $ELSE
- LAC :C:,0 LOAD 2ND DIM :C:
- $ENDIF
- $IF A.SA&$UNDF
- CALL LTK$ LOAD CONST 1ST DIM :A:
- REF LTK$
- DATA :A:
- $ELSE
- LT :A: LOAD 1ST DIM :A:
- $ENDIF
- $IF B.SA&$UNDF
- MPYK :B: MPY BY DIM OF :C:
- $ELSE
- MPY :B: MPY BY DIM OF :C:
- $ENDIF
- APAC ADD 1ST AND 2ND DIM
- $IF A2.L#=0
- SACL :T:,0 SAVE IN :T:
- $IF B2.SA&$UNDF
- LACK :B2: LOAD CONST 3RD DIM :B2:
- $ELSE
- LAC :B2:,0 LOAD 3RD DIM :B2:
- $ENDIF
- LT :T: LOAD 1ST+2ND DIM
- $IF A2.SA&$UNDF
- MPYK :A2: MPY BY DIM OF :B2:
- $ELSE
- MPY :A2: MPY BY DIM OF :B2:
- $ENDIF
- APAC 1ST+2ND+3RD DIM
- $IF C2.L#=0 IF MORE DIM, RECUR
- $ARY3 :T:,:C2:
- $ENDIF
- $ENDIF
- $ENDIF
- $END
-
- $ARY3 $MACRO T,A,B,C
- SACL :T:,0 SAVE 1ST TO N-1TH DIM IN :T:
- $IF B.SA&$UNDF
- LACK :B: LOAD CONST NTH DIM :B:
- $ELSE
- LAC :B:,0 LOAD CONST NTH DIM :B:
- $ENDIF
- LT :T: LOAD 1ST TO N-1TH DIM
- $IF A.SA&$UNDF
- MPYK :A: MPY BY DIM OF :B:
- $ELSE
- MPY :A: MPY BY DIM OF :B:
- $ENDIF
- APAC SUM 1ST TO NTH DIM
- $IF C.L#=0 IF MORE DIM, RECUR
- $ARY3 :T:,:C:
- $ENDIF
- $END